#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
using namespace std;

namespace ZH
{

	class string

	{

	public:

		string(const char* str = "")
		{
			size_t sz = strlen(str);
			_str = new char[sz + 1];
			strcpy(_str, str);
		}

		string(const string& s)
		{
			size_t sz = strlen(s._str);
			char* temp = new char[sz + 1];
			strcpy(temp, s._str);
			if (_str != nullptr)
			{
				delete[] _str;
			}
			_str = temp;

		}

		string& operator=(const string& s)
		{
			if (strlen(_str) < strlen(s._str))
			{
				size_t sz = strlen(s._str);
				char* temp = new char[sz + 1];
				strcpy(temp, s._str);
				if (_str != nullptr)
				{
					delete[] _str;
				}
				_str = temp;
			}
			else
			{
				strcpy(_str, s._str);
			}
			return *this;

		}

		~string()
		{
			delete[] _str;
			_str = nullptr;
		}

	private:

		char* _str;

	};
}

int main()
{
	ZH::string st1("hello");
	ZH::string st3("xxxx");
	ZH::string st2 = st1;
	st3 = st1;
	return 0;
}